package blackitheima2.ClassTest;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

public class MyClass2 {
    public static void main(String[] args) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, ClassNotFoundException {
        //创建系统类加载器
        ClassLoader classLoader = MyClass2.class.getClassLoader();
        //调用系统类加载器方法,获得src泪下的prop.properties文件内容,返回一个字节流
        InputStream stream = classLoader.getResourceAsStream("prop.properties");

        //创建Properties类的对象(类似Map集合)
        Properties prop=new Properties();
        //将字节流导入到prop对象中
        prop.load(stream);
        //调用方法通过键获取其中的值
        String classname = prop.getProperty("Classname");
        String methodClass = prop.getProperty("methodClass");


        //创建反射来调取成员方法执行
        //创建Class类
        //Class<MyClass2> myClass2Class = MyClass2.class;错误
        Class<?> aClass = Class.forName(classname);

        //创建对象--调用无参构造方法创建对象
//        Constructor<MyClass2> declaredConstructor = myClass2Class.getDeclaredConstructor();
        Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
        //调用方法创建对象
//        MyClass2 myClass2 = declaredConstructor.newInstance();
        Object o = declaredConstructor.newInstance();

        //通过Class类提取成员方法
        Method declaredMethod = aClass.getDeclaredMethod(methodClass);
        //调用方法
        Object invoke = declaredMethod.invoke(o);
       // System.out.println(invoke); 无返回值
    }
}
